/* global Cesium */
const CesiumCamera = Cesium.Camera;
// import createGuid from 'cesium/Core/createGuid';
// import VerticalOrigin from 'cesium/Scene/VerticalOrigin';
// import Cartesian3 from 'cesium/Core/Cartesian3';

// import carToDegrees from '../Core/carToDegrees';

// let flyEvent = {};
// class Camera extends CesiumCamera {
//     // /**
//     //  * 获取当前视角高度的方法
//     //  * @exports
//     //  * @param    {[int]}                 fixed [保留小数点后位数]
//     //  * @return   {[int]}                 [视角的高度值]
//     //  */
//     getViewHeight(fixed) {
//         let viewHeight = this.positionCartographic.height;
//         viewHeight = fixed ? viewHeight.toFixed(parseInt(fixed, 0)) : viewHeight;
//         return parseInt(viewHeight, 0);
//     }

//     // /**
//     //  * 通过传入一个camera对象，更新当前摄像机的位置
//     //  * @exports
//     //  * @param    {[Object]}                 options [position,direction,up,frustum]
//     //  * @return   {[null]}
//     //  */
//     updateCamera(options) {
//         this.setView({
//             destination: options.position,
//         });
//         this.loadFrustum(options.frustum);
//     }

//     /**
//      * 保存摄像机的frustum参数
//      * @exports
//      * @param    {[Object]}                 frustum camera的frustum对象
//      * @return   {[Object]}                         保存后的frustum
//      */
//     saveFrustum(frustum) {
//         let options = {};
//         Object.assign(options, frustum);
//         return options;
//     }

//     /**
//      * 载入摄像机的frustum参数
//      * @exports
//      * @param    {[Object]}                 frustum camera的frustum对象
//      * @return   {[null]}
//      */
//     loadFrustum(frustum) {
//         Object.assign(this.frustum, frustum);
//     }

//     // myFlyTo({
//     //     destination,
//     //     orientation = {},
//     //     duration = 4,
//     //     complete = () => {},
//     //     cancel = () => {},
//     // }) {
//     //     let id = createGuid();

//     //     flyEvent = function() {
//     //         let entity = ev.entities.getById(id);
//     //         if (!entity) return;
//     //         let entityPosition = entity.position._value;

//     //         let windowPosition = ev.scene.cartesianToCanvasCoordinates(entityPosition);
//     //         let ray = ev.scene.camera.getPickRay(windowPosition);
//     //         let pickPosition = ev.scene.globe.pick(ray, ev.scene);
//     //         if (!pickPosition) return;

//     //         if (
//     //             Math.abs(pickPosition.x - entityPosition.x) > 1000 ||
//     //             Math.abs(pickPosition.y - entityPosition.y) > 2000 ||
//     //             Math.abs(pickPosition.z - entityPosition.z) > 1000
//     //         ) {
//     //             entity.show = false;
//     //         } else {
//     //             entity.show = true;
//     //         }
//     //     };

//     //     ev.scene.postUpdate.addEventListener(flyEvent);

//     //     let postions = carToDegrees(destination);

//     //     let entity = ev.entities.add({
//     //         id: id,
//     //         position: Cartesian3.fromDegrees(postions.lon, postions.lat),
//     //         billboard: {
//     //             show: true,
//     //             image: './Assets/Images/rect.png',
//     //             verticalOrigin: VerticalOrigin.CENTER,
//     //             width: 3000,
//     //             height: 3000,
//     //         },
//     //     });

//     //     ev.camera.flyTo({
//     //         destination: destination,
//     //         orientation: orientation,
//     //         duration: duration,
//     //         complete: function() {
//     //             ev.entities.removeById(id);
//     //             ev.scene.postUpdate.removeEventListener(flyEvent);
//     //             complete();
//     //         },
//     //         cancel: function() {
//     //             ev.entities.removeById(id);
//     //             ev.scene.postUpdate.removeEventListener(flyEvent);
//     //             cancel();
//     //         },
//     //     });
//     // }
// }

// /**
//  * 获取当前视角高度的方法
//  * @exports
//  * @param    {[int]}                 fixed [保留小数点后位数]
//  * @return   {[int]}                 [视角的高度值]
//  */
CesiumCamera.prototype.getViewHeight = function(fixed) {
    let viewHeight = this.positionCartographic.height;
    viewHeight = fixed ? viewHeight.toFixed(parseInt(fixed, 0)) : viewHeight;
    return parseInt(viewHeight, 0);
};

// /**
//  * 通过传入一个camera对象，更新当前摄像机的位置
//  * @exports
//  * @param    {[Object]}                 options [position,direction,up,frustum]
//  * @return   {[null]}
//  */
CesiumCamera.prototype.updateCamera = function(options) {
    this.setView({
        destination: options.position,
    });
    this.loadFrustum(options.frustum);
};

/**
 * 保存摄像机的frustum参数
 * @exports
 * @param    {[Object]}                 frustum camera的frustum对象
 * @return   {[Object]}                         保存后的frustum
 */
CesiumCamera.prototype.saveFrustum = function(frustum) {
    let options = {};
    Object.assign(options, frustum);
    return options;
};

/**
 * 载入摄像机的frustum参数
 * @exports
 * @param    {[Object]}                 frustum camera的frustum对象
 * @return   {[null]}
 */
CesiumCamera.prototype.loadFrustum = function(frustum) {
    Object.assign(this.frustum, frustum);
};

export default CesiumCamera;
